package servlet;

import util.StringUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2023年06月28日 17:01
 * 实现添加员工的功能,可以使用JDBC实现
 */
@WebServlet("/addEmp")
public class AddEmpServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        // 获取表单提交的数据
        // 通过getParameter()获取请求中的数据
        // 其方法参数为数据的key,即为表单数据的name属性值
        // 方法返回值为表单的服务器值,只能返回字符串

        // 对于请求参数,如果是中文,可能会出现乱码
        // 根据请求提交方式的不同,乱码的处理方式也不同
        // 主要分为两种请求
        // 1.post
        // 告诉服务器,以什么样的编码解析请求中的数据
        // 设置编码时必须在获取请求中的数据之前
        request.setCharacterEncoding("UTF-8");

        // 2.get请求
        // 所有的解析是由服务器进行操作的,我们无法在代码中进行控制
        // 因此,想要解决此处的乱码,有两种方式
        // String name = request.getParameter("name");
        // 方式一.将解析出来的中文进行转码
        // tomcat7默认编码为ISO-8859-1
        // 需要将ISO-8859-1编码的中文转换成我们需要的编码的中文
        // 此时可以解决乱码问题,但是该方式非常的繁琐
        // 对于请求参数,可能存在无数个,很多都有可能存在乱码问题
        // 这种情况下,我们可以创建一个工具类进行转换
        // name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

        // 方式二:更改服务器默认编码
        // 由于此时请求数据的解析是由服务器根据其编码进行解析的
        // 因此,我们可以直接修改服务器的默认编码
        // 改为我们所需要的编码即可
        // 找到tomcat安装目录的conf目录中的server.xml文件
        // 在该文件中找到端口号配置所在的标签
        // 在该标签中添加一个属性:URIEncoding="指定编码"

//        String salary = request.getParameter("salary");
//        String gender = request.getParameter("gender");
//        String edu = request.getParameter("edu");
//        // getParameterValues()方法用于获取服务器值为数组的场景,一般用于多选框
//        String[] hobbies = request.getParameterValues("hobbies");
//        System.out.println("name:"+name+",salary:"+salary+",gender:"+gender+",edu:"+edu+",hobbies:"+ Arrays.toString(hobbies));

        // 1.根据该页面创建对应的表t_emp
        // 2.根据获取到的数据执行JDBC的添加操作
        Connection conn = null;
        PreparedStatement ps = null;
        String url = "jdbc:mysql://127.0.0.1:3306/web?useUnicode=true&characterEncoding=utf-8";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,"root","");
            String sql = new StringBuffer()
                    .append(" insert into ")
                    .append(" t_emp ")
                    .append("   (name,salary,gender,edu,hobbies)")
                    .append(" values ")
                    .append("   (?,?,?,?,?)")
                    .toString();
            ps = conn.prepareStatement(sql);
//            ps.setString(1,name);
//            ps.setDouble(2,Double.parseDouble(salary));
//            ps.setString(3,gender);
//            ps.setString(4,edu);
//            ps.setString(5, StringUtil.arrayToString(hobbies));

            // 执行DML操作
            // ps.executeUpdate();
            // 3.返回响应信息,不管成功还是失败均需要返回响应
            // 成功的话返回一个绿色的恭喜您,添加成功p
            // out.println("<h1 style='color:green;'>恭喜您,添加成功</h1>");

            // 通过页面跳转的方式进入到员工列表
            // 有两种方式实现:重定向、转发
            // 1.重定向
            response.sendRedirect("findAll");
//            response.sendRedirect("https://www.baidu.com/");
//            response.sendRedirect("WEB-INF/test.jsp");
            // 2.转发
//            request.getRequestDispatcher("findAll").forward(request,response);
//            request.getRequestDispatcher("https://www.baidu.com/").forward(request,response);
//            request.getRequestDispatcher("/WEB-INF/test.jsp").forward(request,response);
        } catch (ClassNotFoundException e) {
            // 失败则返回一个红色的对不起,添加失败,失败原因:xxx
            e.printStackTrace();
            out.println("<h1 style='color:red;'>对不起,添加失败,失败原因:"+e.getMessage()+"</h1>");
        } catch (SQLException e) {
            e.printStackTrace();
            out.println("<h1 style='color:red;'>对不起,添加失败,失败原因:"+e.getMessage()+"</h1>");
        } finally {
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps != null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }


    }

}
